package practice1;


/**
 * 一个数组中有两种数出现了奇数次，其他数都出现了偶数次，怎么找到并打印这两种数？
 * @author Tara
 * @implNote
 */
public class Pra6 {

    public static void main(String[] args) {

        int arr[] = new int[]{0,1,2,3,4,5,1,2,3,4,5,0,2,4,5,6};
        printOddNums(arr);

    }

    private static void printOddNums(int[] arr) {
        // 所有数做异或操作
        int eor = 0;
        for (int i = 0; i < arr.length; i++) {
            eor^=arr[i];
        }
        // 去除num左右侧的1
        int rightOne = eor & (~eor+1);

        for (int i = 0; i < arr.length; i++) {
            if ((arr[i] & rightOne) == rightOne){
                rightOne^=arr[i];
            }
        }
        System.out.println("第一个数是"+rightOne +"第二个数是"+(eor^rightOne));
    }
}
